package com.leafrest.core;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.leafrest.core.constant.ErrorCode;

/**
 * 
 * json接口基础实现类,如果需要封装json接口请继承它
 * 
 * @author 李欢
 * 
 */
public class RestBaseController {

	/**
	 * 创建一个空的返回集合
	 * 
	 * @return
	 */
	public Map<String, Object> createResults() {
		return new HashMap<String, Object>();
	}

	/**
	 * 创建返回集合,同时put错误编码
	 * 
	 * @param code
	 *            错误编码
	 * @return
	 */
	public Map<String, Object> createResults(ErrorCode code) {
		Map<String, Object> results = new HashMap<String, Object>();
		results.put("code", code.getCode());
		results.put("msg", code.getMsg());
		return results;
	}

	/**
	 * 创建返回集合,同时put错误编码和返回数据
	 * 
	 * @param code
	 * @param data
	 * @return
	 */
	public Map<String, Object> createResults(ErrorCode code, Object data) {
		Map<String, Object> results = new HashMap<String, Object>();
		data = filterNullValue(data);
		results.put("code", code.getCode());
		results.put("msg", code.getMsg());
		results.put("data", data);
		return results;
	}

	/**
	 * 
	 * 空值过滤，将为null的值key删掉
	 * 
	 * @param obj
	 *            要过滤的JSON对象，类型：JSONObject或JSONArray
	 * @return
	 */
	public Object filterNullValue(Object obj) {
		obj = JSONObject.toJSON(obj);
		if (obj instanceof JSONArray) {
			JSONArray array = (JSONArray) obj;
			Iterator<Object> itor = array.iterator();
			while (itor.hasNext()) {
				JSONObject jsonObject = (JSONObject) itor.next();
				Iterator<String> keys = jsonObject.keySet().iterator();
				List<String> nullKey = new ArrayList<String>();
				while (keys.hasNext()) {
					String key = keys.next();
					if (jsonObject.get(key) == null) {
						nullKey.add(key);
					} else {
						filterNullValue(jsonObject.get(key));
					}
				}
				for (String key : nullKey) {
					jsonObject.remove(key);
				}
			}
		} else if (obj instanceof JSONObject) {
			JSONObject jsonObject = (JSONObject) obj;
			Iterator<String> keys = jsonObject.keySet().iterator();
			List<String> nullKey = new ArrayList<String>();
			while (keys.hasNext()) {
				String key = keys.next();
				if (jsonObject.get(key) == null) {
					nullKey.add(key);
				} else {
					filterNullValue(jsonObject.get(key));
				}
			}
			for (String key : nullKey) {
				jsonObject.remove(key);
			}
		}
		return obj;
	}

	/**
	 * 
	 * 判断对象是否为空(null || ""),为空返回true,不为空返回false
	 * 
	 * @param arg0
	 * @return
	 */
	public boolean isEmpty(Object arg0) {
		if (arg0 == null) {
			return true;
		}
		if (arg0.equals("")) {
			return true;
		}
		return false;
	}

	/**
	 * 
	 * 判断对象是否为空(null || ""),为空返回false,不为空返回true
	 * 
	 * @param arg0
	 * @return
	 */
	public boolean isNotEmpty(Object arg0) {
		if (arg0 == null) {
			return false;
		}
		if (arg0.equals("")) {
			return false;
		}
		return true;
	}

	/**
	 * 
	 * 将String转换成int,不是数字时抛出NumberFormatException
	 * 
	 * @param arg0
	 *            要转换的String格式数字
	 * @return
	 * @throws NumberFormatException
	 */
	public int parseInt(String arg0) throws NumberFormatException {
		return Integer.parseInt(arg0);
	}

	/**
	 * 
	 * 将String转换成java.util.Date,不是数字时抛出ParseException
	 * 
	 * @param arg0
	 *            要转换的String格式的日期
	 * @param format
	 *            日期格式定义
	 * @return
	 */
	public Date parseDate(String arg0, String format) throws ParseException {
		DateFormat dateformat = new SimpleDateFormat(format);
		return dateformat.parse(arg0);
	}
}
